home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Bank smakow / BankSmakow.air / BankSmakow.swf / scripts / mx / controls / Tree.as < prev    next >
Text File  |  2009-12-16  |  79KB  |  2,303 lines

  1. package mx.controls
  2. {
  3.    import flash.display.DisplayObject;
  4.    import flash.display.Graphics;
  5.    import flash.display.Shape;
  6.    import flash.display.Sprite;
  7.    import flash.events.Event;
  8.    import flash.events.KeyboardEvent;
  9.    import flash.events.MouseEvent;
  10.    import flash.geom.Point;
  11.    import flash.geom.Rectangle;
  12.    import flash.ui.Keyboard;
  13.    import flash.xml.XMLNode;
  14.    import mx.collections.ArrayCollection;
  15.    import mx.collections.CursorBookmark;
  16.    import mx.collections.ICollectionView;
  17.    import mx.collections.IViewCursor;
  18.    import mx.collections.ItemResponder;
  19.    import mx.collections.XMLListCollection;
  20.    import mx.collections.errors.ItemPendingError;
  21.    import mx.controls.listClasses.BaseListData;
  22.    import mx.controls.listClasses.IDropInListItemRenderer;
  23.    import mx.controls.listClasses.IListItemRenderer;
  24.    import mx.controls.listClasses.ListBaseSelectionDataPending;
  25.    import mx.controls.listClasses.ListRowInfo;
  26.    import mx.controls.treeClasses.DefaultDataDescriptor;
  27.    import mx.controls.treeClasses.HierarchicalCollectionView;
  28.    import mx.controls.treeClasses.HierarchicalViewCursor;
  29.    import mx.controls.treeClasses.ITreeDataDescriptor;
  30.    import mx.controls.treeClasses.ITreeDataDescriptor2;
  31.    import mx.controls.treeClasses.TreeItemRenderer;
  32.    import mx.controls.treeClasses.TreeListData;
  33.    import mx.core.ClassFactory;
  34.    import mx.core.EdgeMetrics;
  35.    import mx.core.EventPriority;
  36.    import mx.core.FlexShape;
  37.    import mx.core.FlexSprite;
  38.    import mx.core.IFactory;
  39.    import mx.core.IFlexDisplayObject;
  40.    import mx.core.IIMESupport;
  41.    import mx.core.IInvalidating;
  42.    import mx.core.UIComponent;
  43.    import mx.core.UIComponentGlobals;
  44.    import mx.core.mx_internal;
  45.    import mx.effects.Tween;
  46.    import mx.events.CollectionEvent;
  47.    import mx.events.CollectionEventKind;
  48.    import mx.events.DragEvent;
  49.    import mx.events.ListEvent;
  50.    import mx.events.ListEventReason;
  51.    import mx.events.ScrollEvent;
  52.    import mx.events.TreeEvent;
  53.    import mx.managers.DragManager;
  54.    import mx.styles.StyleManager;
  55.    
  56.    use namespace mx_internal;
  57.    
  58.    public class Tree extends List implements IIMESupport
  59.    {
  60.       
  61.       mx_internal static const VERSION:String = "3.5.0.12683";
  62.       
  63.       mx_internal static var createAccessibilityImplementation:Function;
  64.        
  65.       
  66.       mx_internal var wrappedCollection:ICollectionView;
  67.       
  68.       private var lastTreeSeekPending:TreeSeekPending;
  69.       
  70.       private var _openItems:Object;
  71.       
  72.       private var rowIndex:int;
  73.       
  74.       private var _dragMoveEnabled:Boolean = true;
  75.       
  76.       mx_internal var collectionLength:int;
  77.       
  78.       private var eventAfterTween:Object;
  79.       
  80.       private var rowsTweened:int;
  81.       
  82.       mx_internal var showRootChanged:Boolean = false;
  83.       
  84.       private var dontEdit:Boolean = false;
  85.       
  86.       private var openItemsChanged:Boolean = false;
  87.       
  88.       private var opening:Boolean;
  89.       
  90.       mx_internal var _hasRoot:Boolean = false;
  91.       
  92.       private var rowNameID:Number = 0;
  93.       
  94.       private var tween:Object;
  95.       
  96.       private var expandedItem:Object;
  97.       
  98.       private var bSelectedItemRemoved:Boolean = false;
  99.       
  100.       private var IS_NEW_ROW_STYLE:Object;
  101.       
  102.       private var dataProviderChanged:Boolean = false;
  103.       
  104.       private var bFinishArrowKeySelection:Boolean = false;
  105.       
  106.       private var haveItemIndices:Boolean;
  107.       
  108.       mx_internal var collectionThrowsIPE:Boolean;
  109.       
  110.       mx_internal var _dropData:Object;
  111.       
  112.       private var eventPending:Object;
  113.       
  114.       private var rowList:Array;
  115.       
  116.       private var minScrollInterval:Number = 50;
  117.       
  118.       private var maskList:Array;
  119.       
  120.       public var itemIcons:Object;
  121.       
  122.       mx_internal var isOpening:Boolean = false;
  123.       
  124.       private var _editable:Boolean = false;
  125.       
  126.       private var _userMaxHorizontalScrollPosition:Number = 0;
  127.       
  128.       private var lastUserInteraction:Event;
  129.       
  130.       private var proposedSelectedItem:Object;
  131.       
  132.       mx_internal var _showRoot:Boolean = true;
  133.       
  134.       mx_internal var _dataDescriptor:ITreeDataDescriptor;
  135.       
  136.       mx_internal var _rootModel:ICollectionView;
  137.       
  138.       private var oldLength:int = -1;
  139.       
  140.       private var _itemEditor:IFactory;
  141.       
  142.       public function Tree()
  143.       {
  144.          IS_NEW_ROW_STYLE = {
  145.             "depthColors":true,
  146.             "indentation":true,
  147.             "disclosureOpenIcon":true,
  148.             "disclosureClosedIcon":true,
  149.             "folderOpenIcon":true,
  150.             "folderClosedIcon":true,
  151.             "defaultLeafIcon":true
  152.          };
  153.          _itemEditor = new ClassFactory(TextInput);
  154.          _dataDescriptor = new DefaultDataDescriptor();
  155.          _openItems = {};
  156.          super();
  157.          itemRenderer = new ClassFactory(TreeItemRenderer);
  158.          editorXOffset = 12;
  159.          editorWidthOffset = -12;
  160.          addEventListener(TreeEvent.ITEM_OPENING,mx_internal::expandItemHandler,false,EventPriority.DEFAULT_HANDLER);
  161.       }
  162.       
  163.       override mx_internal function removeClipMask() : void
  164.       {
  165.       }
  166.       
  167.       override protected function dragOverHandler(param1:DragEvent) : void
  168.       {
  169.          var event:DragEvent = param1;
  170.          if(event.isDefaultPrevented())
  171.          {
  172.             return;
  173.          }
  174.          lastDragEvent = event;
  175.          try
  176.          {
  177.             if(iteratorValid && event.dragSource.hasFormat("treeItems"))
  178.             {
  179.                if(mx_internal::collectionThrowsIPE)
  180.                {
  181.                   checkItemIndices(event);
  182.                }
  183.                DragManager.showFeedback(!!event.ctrlKey ? DragManager.COPY : DragManager.MOVE);
  184.                showDropFeedback(event);
  185.                return;
  186.             }
  187.          }
  188.          catch(e:ItemPendingError)
  189.          {
  190.             if(!lastTreeSeekPending)
  191.             {
  192.                lastTreeSeekPending = new TreeSeekPending(event,dragOverHandler);
  193.                e.addResponder(new ItemResponder(seekPendingDuringDragResultHandler,seekPendingDuringDragFailureHandler,lastTreeSeekPending));
  194.             }
  195.          }
  196.          catch(e1:Error)
  197.          {
  198.          }
  199.          hideDropFeedback(event);
  200.          DragManager.showFeedback(DragManager.NONE);
  201.       }
  202.       
  203.       override protected function mouseUpHandler(param1:MouseEvent) : void
  204.       {
  205.          if(!tween)
  206.          {
  207.             super.mouseUpHandler(param1);
  208.          }
  209.       }
  210.       
  211.       private function buildUpCollectionEvents(param1:Boolean) : Array
  212.       {
  213.          var _loc2_:CollectionEvent = null;
  214.          var _loc3_:int = 0;
  215.          var _loc4_:Object = null;
  216.          var _loc5_:Array = null;
  217.          var _loc10_:ICollectionView = null;
  218.          var _loc11_:IViewCursor = null;
  219.          var _loc12_:Boolean = false;
  220.          var _loc13_:Array = null;
  221.          var _loc14_:int = 0;
  222.          var _loc6_:Array = [];
  223.          var _loc7_:Array = [];
  224.          var _loc8_:Array = [];
  225.          var _loc9_:int = getItemIndex(expandedItem);
  226.          if(param1)
  227.          {
  228.             if(!(_loc10_ = getChildren(expandedItem,iterator.view)))
  229.             {
  230.                return [];
  231.             }
  232.             _loc11_ = _loc10_.createCursor();
  233.             _loc12_ = true;
  234.             while(!_loc11_.afterLast)
  235.             {
  236.                _loc6_.push(_loc11_.current);
  237.                _loc11_.moveNext();
  238.             }
  239.          }
  240.          else
  241.          {
  242.             _loc13_ = [];
  243.             _loc14_ = 0;
  244.             _loc13_ = getOpenChildrenStack(expandedItem,_loc13_);
  245.             while(_loc14_ < _loc13_.length)
  246.             {
  247.                _loc3_ = 0;
  248.                while(_loc3_ < selectedItems.length)
  249.                {
  250.                   if(selectedItems[_loc3_] == _loc13_[_loc14_])
  251.                   {
  252.                      bSelectedItemRemoved = true;
  253.                   }
  254.                   _loc3_++;
  255.                }
  256.                _loc7_.push(_loc13_[_loc14_]);
  257.                _loc14_++;
  258.             }
  259.          }
  260.          if(_loc6_.length > 0)
  261.          {
  262.             _loc2_ = new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
  263.             _loc2_.kind = CollectionEventKind.ADD;
  264.             _loc2_.location = _loc9_ + 1;
  265.             _loc2_.items = _loc6_;
  266.             _loc8_.push(_loc2_);
  267.          }
  268.          if(_loc7_.length > 0)
  269.          {
  270.             _loc2_ = new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
  271.             _loc2_.kind = CollectionEventKind.REMOVE;
  272.             _loc2_.location = _loc9_ + 1;
  273.             _loc2_.items = _loc7_;
  274.             _loc8_.push(_loc2_);
  275.          }
  276.          return _loc8_;
  277.       }
  278.       
  279.       private function updateDropData(param1:DragEvent) : void
  280.       {
  281.          var _loc9_:Object = null;
  282.          var _loc10_:int = 0;
  283.          var _loc2_:int = rowInfo.length;
  284.          var _loc3_:int = 0;
  285.          var _loc4_:int = rowInfo[_loc3_].height;
  286.          var _loc5_:Point = globalToLocal(new Point(param1.stageX,param1.stageY));
  287.          while(rowInfo[_loc3_] && _loc5_.y >= _loc4_)
  288.          {
  289.             if(_loc3_ != rowInfo.length - 1)
  290.             {
  291.                _loc3_++;
  292.                _loc4_ += rowInfo[_loc3_].height;
  293.             }
  294.             else
  295.             {
  296.                _loc4_ += rowInfo[_loc3_].height;
  297.                _loc3_++;
  298.             }
  299.          }
  300.          var _loc6_:Number = _loc3_ < rowInfo.length ? Number(rowInfo[_loc3_].y) : Number(rowInfo[_loc3_ - 1].y + rowInfo[_loc3_ - 1].height);
  301.          var _loc7_:Number = _loc5_.y - _loc6_;
  302.          var _loc8_:Number = _loc3_ < rowInfo.length ? Number(rowInfo[_loc3_].height) : Number(rowInfo[_loc3_ - 1].height);
  303.          _loc3_ += verticalScrollPosition;
  304.          var _loc11_:Boolean = false;
  305.          var _loc12_:int = !!collection ? int(collection.length) : 0;
  306.          var _loc13_:Object = _loc3_ > mx_internal::_verticalScrollPosition && _loc3_ <= _loc12_ ? listItems[_loc3_ - mx_internal::_verticalScrollPosition - 1][0].data : null;
  307.          var _loc14_:Object = _loc3_ - verticalScrollPosition < rowInfo.length && _loc3_ < _loc12_ ? listItems[_loc3_ - mx_internal::_verticalScrollPosition][0].data : null;
  308.          var _loc15_:Object = !!collection ? getParentItem(_loc13_) : null;
  309.          var _loc16_:Object = !!collection ? getParentItem(_loc14_) : null;
  310.          if(_loc7_ > _loc8_ * 0.5 && isItemOpen(_loc14_) && mx_internal::_dataDescriptor.isBranch(_loc14_,iterator.view) && (!mx_internal::_dataDescriptor.hasChildren(_loc14_,iterator.view) || mx_internal::_dataDescriptor.getChildren(_loc14_,iterator.view).length == 0))
  311.          {
  312.             _loc9_ = _loc14_;
  313.             _loc10_ = 0;
  314.             _loc11_ = true;
  315.          }
  316.          else if(!_loc13_ && !_loc3_ == _loc2_)
  317.          {
  318.             _loc9_ = !!collection ? getParentItem(_loc14_) : null;
  319.             _loc10_ = !!_loc14_ ? int(getChildIndexInParent(_loc9_,_loc14_)) : 0;
  320.             _loc3_ = 0;
  321.          }
  322.          else if(_loc14_ && _loc16_ == _loc13_)
  323.          {
  324.             _loc9_ = _loc13_;
  325.             _loc10_ = 0;
  326.          }
  327.          else if(_loc13_ && _loc14_ && _loc15_ == _loc16_)
  328.          {
  329.             _loc9_ = !!collection ? getParentItem(_loc13_) : null;
  330.             _loc10_ = !!iterator ? int(getChildIndexInParent(_loc9_,_loc14_)) : 0;
  331.          }
  332.          else if(_loc13_ && _loc7_ < _loc8_ * 0.5)
  333.          {
  334.             _loc9_ = _loc15_;
  335.             _loc10_ = getChildIndexInParent(_loc9_,_loc13_) + 1;
  336.          }
  337.          else if(!_loc14_)
  338.          {
  339.             _loc9_ = null;
  340.             if(_loc3_ - verticalScrollPosition == 0)
  341.             {
  342.                _loc10_ = 0;
  343.             }
  344.             else if(collection)
  345.             {
  346.                _loc10_ = collection.length;
  347.             }
  348.             else
  349.             {
  350.                _loc10_ = 0;
  351.             }
  352.          }
  353.          else
  354.          {
  355.             _loc9_ = _loc16_;
  356.             _loc10_ = getChildIndexInParent(_loc9_,_loc14_);
  357.          }
  358.          _dropData = {
  359.             "parent":_loc9_,
  360.             "index":_loc10_,
  361.             "localX":param1.localX,
  362.             "localY":param1.localY,
  363.             "emptyFolder":_loc11_,
  364.             "rowHeight":_loc8_,
  365.             "rowIndex":_loc3_
  366.          };
  367.       }
  368.       
  369.       mx_internal function removeChildItem(param1:Object, param2:Object, param3:Number) : Boolean
  370.       {
  371.          return mx_internal::_dataDescriptor.removeChildAt(param1,param2,param3,iterator.view);
  372.       }
  373.       
  374.       public function set openItems(param1:Object) : void
  375.       {
  376.          var _loc2_:* = null;
  377.          var _loc3_:* = undefined;
  378.          if(param1 != null)
  379.          {
  380.             for(_loc2_ in _openItems)
  381.             {
  382.                delete _openItems[_loc2_];
  383.             }
  384.             for each(_loc3_ in param1)
  385.             {
  386.                _openItems[itemToUID(_loc3_)] = _loc3_;
  387.             }
  388.             openItemsChanged = true;
  389.             invalidateProperties();
  390.          }
  391.       }
  392.       
  393.       override protected function drawRowBackgrounds() : void
  394.       {
  395.          var color:Object = null;
  396.          var colors:Array = null;
  397.          var n:int = 0;
  398.          var d:int = 0;
  399.          var rowColor:uint = 0;
  400.          var rowBGs:Sprite = Sprite(listContent.getChildByName("rowBGs"));
  401.          if(!rowBGs)
  402.          {
  403.             rowBGs = new FlexSprite();
  404.             rowBGs.name = "rowBGs";
  405.             rowBGs.mouseEnabled = false;
  406.             listContent.addChildAt(rowBGs,0);
  407.          }
  408.          var depthColors:Boolean = false;
  409.          colors = getStyle("depthColors");
  410.          if(colors)
  411.          {
  412.             depthColors = true;
  413.          }
  414.          else
  415.          {
  416.             colors = getStyle("alternatingItemColors");
  417.          }
  418.          color = getStyle("backgroundColor");
  419.          if(!colors || colors.length == 0)
  420.          {
  421.             while(rowBGs.numChildren > n)
  422.             {
  423.                rowBGs.removeChildAt(rowBGs.numChildren - 1);
  424.             }
  425.             return;
  426.          }
  427.          StyleManager.getColorNames(colors);
  428.          var curRow:int = 0;
  429.          var actualRow:int = verticalScrollPosition;
  430.          var i:int = 0;
  431.          n = listItems.length;
  432.          while(curRow < n)
  433.          {
  434.             if(depthColors)
  435.             {
  436.                try
  437.                {
  438.                   if(listItems[curRow][0])
  439.                   {
  440.                      d = getItemDepth(listItems[curRow][0].data,curRow);
  441.                      rowColor = !!colors[d - 1] ? uint(colors[d - 1]) : uint(uint(color));
  442.                      drawRowBackground(rowBGs,i++,rowInfo[curRow].y,rowInfo[curRow].height,rowColor,curRow);
  443.                   }
  444.                   else
  445.                   {
  446.                      drawRowBackground(rowBGs,i++,rowInfo[curRow].y,rowInfo[curRow].height,uint(color),curRow);
  447.                   }
  448.                }
  449.                catch(e:Error)
  450.                {
  451.                }
  452.             }
  453.             else
  454.             {
  455.                drawRowBackground(rowBGs,i++,rowInfo[curRow].y,rowInfo[curRow].height,colors[actualRow % colors.length],actualRow);
  456.             }
  457.             curRow++;
  458.             actualRow++;
  459.          }
  460.          while(rowBGs.numChildren > n)
  461.          {
  462.             rowBGs.removeChildAt(rowBGs.numChildren - 1);
  463.          }
  464.       }
  465.       
  466.       override public function showDropFeedback(param1:DragEvent) : void
  467.       {
  468.          var _loc5_:int = 0;
  469.          super.showDropFeedback(param1);
  470.          var _loc2_:EdgeMetrics = viewMetrics;
  471.          var _loc3_:int = 0;
  472.          updateDropData(param1);
  473.          var _loc4_:int = 0;
  474.          if(mx_internal::_dropData.parent)
  475.          {
  476.             _loc3_ = getItemIndex(iterator.current);
  477.             _loc4_ = ((_loc5_ = getItemDepth(mx_internal::_dropData.parent,Math.abs(_loc3_ - getItemIndex(mx_internal::_dropData.parent)))) + 1) * getStyle("indentation");
  478.          }
  479.          else
  480.          {
  481.             _loc4_ = getStyle("indentation");
  482.          }
  483.          if(_loc4_ < 0)
  484.          {
  485.             _loc4_ = 0;
  486.          }
  487.          mx_internal::dropIndicator.width = listContent.width - _loc4_;
  488.          mx_internal::dropIndicator.x = _loc4_ + _loc2_.left + 2;
  489.          if(mx_internal::_dropData.emptyFolder)
  490.          {
  491.             mx_internal::dropIndicator.y += mx_internal::_dropData.rowHeight / 2;
  492.          }
  493.       }
  494.       
  495.       mx_internal function dispatchTreeEvent(param1:String, param2:Object, param3:IListItemRenderer, param4:Event = null, param5:Boolean = true, param6:Boolean = true, param7:Boolean = true) : void
  496.       {
  497.          var _loc8_:TreeEvent = null;
  498.          if(param1 == TreeEvent.ITEM_OPENING)
  499.          {
  500.             (_loc8_ = new TreeEvent(TreeEvent.ITEM_OPENING,false,true)).opening = param5;
  501.             _loc8_.animate = param6;
  502.             _loc8_.dispatchEvent = param7;
  503.          }
  504.          if(!_loc8_)
  505.          {
  506.             _loc8_ = new TreeEvent(param1);
  507.          }
  508.          _loc8_.item = param2;
  509.          _loc8_.itemRenderer = param3;
  510.          _loc8_.triggerEvent = param4;
  511.          dispatchEvent(_loc8_);
  512.       }
  513.       
  514.       private function finishArrowKeySelection() : void
  515.       {
  516.          var _loc1_:ListEvent = null;
  517.          var _loc2_:Point = null;
  518.          var _loc3_:int = 0;
  519.          bFinishArrowKeySelection = false;
  520.          if(proposedSelectedItem)
  521.          {
  522.             selectedItem = proposedSelectedItem;
  523.          }
  524.          if(selectedItem === proposedSelectedItem || !proposedSelectedItem)
  525.          {
  526.             _loc1_ = new ListEvent(ListEvent.CHANGE);
  527.             _loc1_.itemRenderer = indexToItemRenderer(selectedIndex);
  528.             _loc2_ = itemRendererToIndices(_loc1_.itemRenderer);
  529.             if(_loc2_)
  530.             {
  531.                _loc1_.rowIndex = _loc2_.y;
  532.                _loc1_.columnIndex = _loc2_.x;
  533.             }
  534.             dispatchEvent(_loc1_);
  535.             _loc3_ = getItemIndex(selectedItem);
  536.             if(_loc3_ != caretIndex)
  537.             {
  538.                caretIndex = selectedIndex;
  539.             }
  540.             if(_loc3_ < mx_internal::_verticalScrollPosition)
  541.             {
  542.                verticalScrollPosition = _loc3_;
  543.             }
  544.          }
  545.          else
  546.          {
  547.             bFinishArrowKeySelection = true;
  548.          }
  549.       }
  550.       
  551.       override protected function layoutEditor(param1:int, param2:int, param3:int, param4:int) : void
  552.       {
  553.          var _loc5_:int = rowMap[editedItemRenderer.name].indent;
  554.          itemEditorInstance.move(param1 + _loc5_,param2);
  555.          itemEditorInstance.setActualSize(param3 - _loc5_,param4);
  556.       }
  557.       
  558.       public function isItemOpen(param1:Object) : Boolean
  559.       {
  560.          var _loc2_:String = itemToUID(param1);
  561.          return _openItems[_loc2_] != null;
  562.       }
  563.       
  564.       override mx_internal function addClipMask(param1:Boolean) : void
  565.       {
  566.          var _loc2_:EdgeMetrics = viewMetrics;
  567.          if(horizontalScrollBar && horizontalScrollBar.visible)
  568.          {
  569.             _loc2_.bottom -= horizontalScrollBar.minHeight;
  570.          }
  571.          if(verticalScrollBar && verticalScrollBar.visible)
  572.          {
  573.             _loc2_.right -= verticalScrollBar.minWidth;
  574.          }
  575.          listContent.scrollRect = new Rectangle(0,0,unscaledWidth - _loc2_.left - _loc2_.right,listContent.heightExcludingOffsets);
  576.       }
  577.       
  578.       private function collapseSelectedItems() : Array
  579.       {
  580.          var _loc3_:Object = null;
  581.          var _loc4_:Array = null;
  582.          var _loc5_:int = 0;
  583.          var _loc6_:int = 0;
  584.          var _loc7_:Object = null;
  585.          var _loc1_:ArrayCollection = new ArrayCollection(selectedItems);
  586.          var _loc2_:int = 0;
  587.          while(_loc2_ < selectedItems.length)
  588.          {
  589.             _loc3_ = selectedItems[_loc2_];
  590.             _loc4_ = getParentStack(_loc3_);
  591.             _loc5_ = 0;
  592.             while(_loc5_ < _loc4_.length)
  593.             {
  594.                if(_loc1_.contains(_loc4_[_loc5_]))
  595.                {
  596.                   _loc6_ = _loc1_.getItemIndex(_loc3_);
  597.                   _loc7_ = _loc1_.removeItemAt(_loc6_);
  598.                   break;
  599.                }
  600.                _loc5_++;
  601.             }
  602.             _loc2_++;
  603.          }
  604.          return _loc1_.source;
  605.       }
  606.       
  607.       override public function isItemVisible(param1:Object) : Boolean
  608.       {
  609.          var _loc3_:String = null;
  610.          if(visibleData[itemToUID(param1)])
  611.          {
  612.             return true;
  613.          }
  614.          var _loc2_:Object = getParentItem(param1);
  615.          if(_loc2_)
  616.          {
  617.             _loc3_ = itemToUID(_loc2_);
  618.             if(visibleData[_loc3_] && _openItems[_loc3_])
  619.             {
  620.                return true;
  621.             }
  622.          }
  623.          return false;
  624.       }
  625.       
  626.       private function getIndexItem(param1:int) : Object
  627.       {
  628.          var _loc2_:IViewCursor = collection.createCursor();
  629.          var _loc3_:int = param1;
  630.          while(_loc2_.moveNext())
  631.          {
  632.             if(_loc3_ == 0)
  633.             {
  634.                return _loc2_.current;
  635.             }
  636.             _loc3_--;
  637.          }
  638.          return null;
  639.       }
  640.       
  641.       private function seekPendingDuringDragResultHandler(param1:Object, param2:TreeSeekPending) : void
  642.       {
  643.          lastTreeSeekPending = null;
  644.          if(mx_internal::lastDragEvent)
  645.          {
  646.             param2.retryFunction(param2.event);
  647.          }
  648.       }
  649.       
  650.       private function getChildIndexInParent(param1:Object, param2:Object) : int
  651.       {
  652.          var _loc4_:IViewCursor = null;
  653.          var _loc5_:ICollectionView = null;
  654.          var _loc3_:int = 0;
  655.          if(!param1)
  656.          {
  657.             _loc4_ = ICollectionView(iterator.view).createCursor();
  658.             while(!_loc4_.afterLast)
  659.             {
  660.                if(param2 === _loc4_.current)
  661.                {
  662.                   break;
  663.                }
  664.                _loc3_++;
  665.                _loc4_.moveNext();
  666.             }
  667.          }
  668.          else if(param1 != null && mx_internal::_dataDescriptor.isBranch(param1,iterator.view) && mx_internal::_dataDescriptor.hasChildren(param1,iterator.view))
  669.          {
  670.             if((_loc5_ = getChildren(param1,iterator.view)).contains(param2))
  671.             {
  672.                _loc4_ = _loc5_.createCursor();
  673.                while(!_loc4_.afterLast)
  674.                {
  675.                   if(param2 === _loc4_.current)
  676.                   {
  677.                      break;
  678.                   }
  679.                   _loc4_.moveNext();
  680.                   _loc3_++;
  681.                }
  682.             }
  683.          }
  684.          return _loc3_;
  685.       }
  686.       
  687.       override public function get dragMoveEnabled() : Boolean
  688.       {
  689.          return _dragMoveEnabled;
  690.       }
  691.       
  692.       override protected function mouseDownHandler(param1:MouseEvent) : void
  693.       {
  694.          if(!tween)
  695.          {
  696.             super.mouseDownHandler(param1);
  697.          }
  698.       }
  699.       
  700.       override public function calculateDropIndex(param1:DragEvent = null) : int
  701.       {
  702.          if(param1)
  703.          {
  704.             updateDropData(param1);
  705.          }
  706.          return mx_internal::_dropData.rowIndex;
  707.       }
  708.       
  709.       override protected function keyDownHandler(param1:KeyboardEvent) : void
  710.       {
  711.          var _loc2_:ListEvent = null;
  712.          var _loc3_:Point = null;
  713.          var _loc5_:IListItemRenderer = null;
  714.          var _loc6_:* = false;
  715.          var _loc7_:Object = null;
  716.          var _loc8_:ICollectionView = null;
  717.          var _loc9_:IViewCursor = null;
  718.          if(mx_internal::isOpening)
  719.          {
  720.             param1.stopImmediatePropagation();
  721.             return;
  722.          }
  723.          if(itemEditorInstance)
  724.          {
  725.             return;
  726.          }
  727.          var _loc4_:Object = selectedItem;
  728.          if(param1.ctrlKey)
  729.          {
  730.             super.keyDownHandler(param1);
  731.          }
  732.          else if(param1.keyCode == Keyboard.SPACE)
  733.          {
  734.             if(caretIndex != selectedIndex)
  735.             {
  736.                if(_loc5_ = indexToItemRenderer(caretIndex))
  737.                {
  738.                   drawItem(_loc5_);
  739.                }
  740.                caretIndex = selectedIndex;
  741.             }
  742.             if(isBranch(_loc4_))
  743.             {
  744.                _loc6_ = !isItemOpen(_loc4_);
  745.                dispatchTreeEvent(TreeEvent.ITEM_OPENING,_loc4_,null,param1,_loc6_,true,true);
  746.             }
  747.             param1.stopImmediatePropagation();
  748.          }
  749.          else if(param1.keyCode == Keyboard.LEFT)
  750.          {
  751.             if(isItemOpen(_loc4_))
  752.             {
  753.                dispatchTreeEvent(TreeEvent.ITEM_OPENING,_loc4_,null,param1,false,true,true);
  754.             }
  755.             else if(_loc7_ = getParentItem(_loc4_))
  756.             {
  757.                proposedSelectedItem = _loc7_;
  758.                finishArrowKeySelection();
  759.             }
  760.             param1.stopImmediatePropagation();
  761.          }
  762.          else if(param1.keyCode == Keyboard.RIGHT)
  763.          {
  764.             if(isBranch(_loc4_))
  765.             {
  766.                if(isItemOpen(_loc4_))
  767.                {
  768.                   if(_loc4_)
  769.                   {
  770.                      if(_loc8_ = getChildren(_loc4_,iterator.view))
  771.                      {
  772.                         if((_loc9_ = _loc8_.createCursor()).current)
  773.                         {
  774.                            proposedSelectedItem = _loc9_.current;
  775.                         }
  776.                      }
  777.                      else
  778.                      {
  779.                         proposedSelectedItem = null;
  780.                      }
  781.                   }
  782.                   else
  783.                   {
  784.                      selectedItem = proposedSelectedItem = null;
  785.                   }
  786.                   finishArrowKeySelection();
  787.                }
  788.                else
  789.                {
  790.                   dispatchTreeEvent(TreeEvent.ITEM_OPENING,_loc4_,null,param1,true,true,true);
  791.                }
  792.             }
  793.             param1.stopImmediatePropagation();
  794.          }
  795.          else if(param1.keyCode == Keyboard.NUMPAD_MULTIPLY)
  796.          {
  797.             expandChildrenOf(_loc4_,!isItemOpen(_loc4_));
  798.          }
  799.          else if(param1.keyCode == Keyboard.NUMPAD_ADD)
  800.          {
  801.             if(isBranch(_loc4_))
  802.             {
  803.                if(!isItemOpen(_loc4_))
  804.                {
  805.                   dispatchTreeEvent(TreeEvent.ITEM_OPENING,_loc4_,null,param1,true,true,true);
  806.                }
  807.             }
  808.          }
  809.          else if(param1.keyCode == Keyboard.NUMPAD_SUBTRACT)
  810.          {
  811.             if(isItemOpen(_loc4_))
  812.             {
  813.                dispatchTreeEvent(TreeEvent.ITEM_OPENING,_loc4_,null,param1,false,true,true);
  814.             }
  815.          }
  816.          else
  817.          {
  818.             super.keyDownHandler(param1);
  819.          }
  820.       }
  821.       
  822.       mx_internal function onTweenEnd(param1:Object) : void
  823.       {
  824.          var _loc2_:int = 0;
  825.          var _loc3_:* = undefined;
  826.          var _loc4_:IDropInListItemRenderer = null;
  827.          var _loc6_:* = undefined;
  828.          var _loc7_:Object = null;
  829.          var _loc8_:Array = null;
  830.          var _loc9_:int = 0;
  831.          var _loc10_:DisplayObject = null;
  832.          UIComponent.resumeBackgroundProcessing();
  833.          onTweenUpdate(param1);
  834.          var _loc5_:int = listItems.length;
  835.          isOpening = false;
  836.          if(collection)
  837.          {
  838.             _loc8_ = !!opening ? buildUpCollectionEvents(true) : buildUpCollectionEvents(false);
  839.             _loc2_ = 0;
  840.             while(_loc2_ < _loc8_.length)
  841.             {
  842.                collection.dispatchEvent(_loc8_[_loc2_]);
  843.                _loc2_++;
  844.             }
  845.          }
  846.          if(opening)
  847.          {
  848.             _loc9_ = -1;
  849.             _loc2_ = rowIndex;
  850.             while(_loc2_ < _loc5_)
  851.             {
  852.                if(listItems[_loc2_].length)
  853.                {
  854.                   _loc3_ = listItems[_loc2_][0];
  855.                   if(_loc10_ = _loc3_.mask)
  856.                   {
  857.                      listContent.removeChild(_loc10_);
  858.                      _loc3_.mask = null;
  859.                   }
  860.                   rowMap[_loc3_.name].rowIndex = _loc2_;
  861.                   if(_loc3_ is IDropInListItemRenderer)
  862.                   {
  863.                      if((_loc4_ = IDropInListItemRenderer(_loc3_)).listData)
  864.                      {
  865.                         _loc4_.listData.rowIndex = _loc2_;
  866.                         _loc4_.listData = _loc4_.listData;
  867.                      }
  868.                   }
  869.                   if(_loc3_.y > listContent.height)
  870.                   {
  871.                      addToFreeItemRenderers(_loc3_);
  872.                      _loc6_ = itemToUID(_loc3_.data);
  873.                      if(selectionIndicators[_loc6_])
  874.                      {
  875.                         if(_loc7_ = selectionIndicators[_loc6_])
  876.                         {
  877.                            if(_loc10_ = _loc7_.mask)
  878.                            {
  879.                               listContent.removeChild(_loc10_);
  880.                               _loc7_.mask = null;
  881.                            }
  882.                         }
  883.                         removeIndicators(_loc6_);
  884.                      }
  885.                      delete rowMap[_loc3_.name];
  886.                      if(_loc9_ < 0)
  887.                      {
  888.                         _loc9_ = _loc2_;
  889.                      }
  890.                   }
  891.                }
  892.                else if(rowInfo[_loc2_].y >= listContent.height)
  893.                {
  894.                   if(_loc9_ < 0)
  895.                   {
  896.                      _loc9_ = _loc2_;
  897.                   }
  898.                }
  899.                _loc2_++;
  900.             }
  901.             if(_loc9_ >= 0)
  902.             {
  903.                rowInfo.splice(_loc9_);
  904.                listItems.splice(_loc9_);
  905.             }
  906.          }
  907.          else
  908.          {
  909.             _loc2_ = 0;
  910.             while(_loc2_ < rowList.length)
  911.             {
  912.                if(_loc10_ = rowList[_loc2_].item.mask)
  913.                {
  914.                   listContent.removeChild(_loc10_);
  915.                   rowList[_loc2_].item.mask = null;
  916.                }
  917.                addToFreeItemRenderers(rowList[_loc2_].item);
  918.                _loc6_ = itemToUID(rowList[_loc2_].item.data);
  919.                if(selectionIndicators[_loc6_])
  920.                {
  921.                   if(_loc7_ = selectionIndicators[_loc6_])
  922.                   {
  923.                      if(_loc10_ = _loc7_.mask)
  924.                      {
  925.                         listContent.removeChild(_loc10_);
  926.                         _loc7_.mask = null;
  927.                      }
  928.                   }
  929.                   removeIndicators(_loc6_);
  930.                }
  931.                delete rowMap[rowList[_loc2_].item.name];
  932.                _loc2_++;
  933.             }
  934.             _loc2_ = rowIndex;
  935.             while(_loc2_ < _loc5_)
  936.             {
  937.                if(listItems[_loc2_].length)
  938.                {
  939.                   _loc3_ = listItems[_loc2_][0];
  940.                   rowMap[_loc3_.name].rowIndex = _loc2_;
  941.                   if(_loc3_ is IDropInListItemRenderer)
  942.                   {
  943.                      if((_loc4_ = IDropInListItemRenderer(_loc3_)).listData)
  944.                      {
  945.                         _loc4_.listData.rowIndex = _loc2_;
  946.                         _loc4_.listData = _loc4_.listData;
  947.                      }
  948.                   }
  949.                }
  950.                _loc2_++;
  951.             }
  952.          }
  953.          if(eventAfterTween)
  954.          {
  955.             dispatchTreeEvent(!!isItemOpen(eventAfterTween) ? TreeEvent.ITEM_OPEN : TreeEvent.ITEM_CLOSE,eventAfterTween,visibleData[itemToUID(eventAfterTween)],lastUserInteraction);
  956.             lastUserInteraction = null;
  957.             eventAfterTween = false;
  958.          }
  959.          itemsSizeChanged = true;
  960.          invalidateDisplayList();
  961.          tween = null;
  962.       }
  963.       
  964.       override protected function adjustAfterRemove(param1:Array, param2:int, param3:Boolean) : Boolean
  965.       {
  966.          var _loc4_:int = selectedItems.length;
  967.          var _loc5_:Boolean = param3;
  968.          var _loc6_:int = param1.length;
  969.          if(mx_internal::_selectedIndex > param2)
  970.          {
  971.             _selectedIndex -= _loc6_;
  972.             _loc5_ = true;
  973.          }
  974.          if(bSelectedItemRemoved && _loc4_ < 1)
  975.          {
  976.             _selectedIndex = getItemIndex(expandedItem);
  977.             _loc5_ = true;
  978.             bSelectionChanged = true;
  979.             bSelectedIndexChanged = true;
  980.             invalidateDisplayList();
  981.          }
  982.          return _loc5_;
  983.       }
  984.       
  985.       public function set dataDescriptor(param1:ITreeDataDescriptor) : void
  986.       {
  987.          _dataDescriptor = param1;
  988.       }
  989.       
  990.       private function isBranch(param1:Object) : Boolean
  991.       {
  992.          if(param1 != null)
  993.          {
  994.             return mx_internal::_dataDescriptor.isBranch(param1,iterator.view);
  995.          }
  996.          return false;
  997.       }
  998.       
  999.       private function getVisibleChildrenCount(param1:Object) : int
  1000.       {
  1001.          var _loc4_:Object = null;
  1002.          var _loc5_:IViewCursor = null;
  1003.          var _loc2_:int = 0;
  1004.          if(param1 == null)
  1005.          {
  1006.             return _loc2_;
  1007.          }
  1008.          var _loc3_:String = itemToUID(param1);
  1009.          if(_openItems[_loc3_] && mx_internal::_dataDescriptor.isBranch(param1,iterator.view) && mx_internal::_dataDescriptor.hasChildren(param1,iterator.view))
  1010.          {
  1011.             _loc4_ = getChildren(param1,iterator.view);
  1012.          }
  1013.          if(_loc4_ != null)
  1014.          {
  1015.             _loc5_ = _loc4_.createCursor();
  1016.             while(!_loc5_.afterLast)
  1017.             {
  1018.                _loc2_++;
  1019.                _loc3_ = itemToUID(_loc5_.current);
  1020.                if(_openItems[_loc3_])
  1021.                {
  1022.                   _loc2_ += getVisibleChildrenCount(_loc5_.current);
  1023.                }
  1024.                _loc5_.moveNext();
  1025.             }
  1026.          }
  1027.          return _loc2_;
  1028.       }
  1029.       
  1030.       mx_internal function getChildren(param1:Object, param2:Object) : ICollectionView
  1031.       {
  1032.          return mx_internal::_dataDescriptor.getChildren(param1,param2);
  1033.       }
  1034.       
  1035.       public function expandChildrenOf(param1:Object, param2:Boolean) : void
  1036.       {
  1037.          var _loc3_:ICollectionView = null;
  1038.          var _loc4_:IViewCursor = null;
  1039.          if(iterator == null)
  1040.          {
  1041.             return;
  1042.          }
  1043.          if(isBranch(param1))
  1044.          {
  1045.             dispatchTreeEvent(TreeEvent.ITEM_OPENING,param1,null,null,param2,false,true);
  1046.             if(param1 != null && mx_internal::_dataDescriptor.isBranch(param1,iterator.view) && mx_internal::_dataDescriptor.hasChildren(param1,iterator.view))
  1047.             {
  1048.                _loc3_ = getChildren(param1,iterator.view);
  1049.             }
  1050.             if(_loc3_)
  1051.             {
  1052.                _loc4_ = _loc3_.createCursor();
  1053.                while(!_loc4_.afterLast)
  1054.                {
  1055.                   if(isBranch(_loc4_.current))
  1056.                   {
  1057.                      expandChildrenOf(_loc4_.current,param2);
  1058.                   }
  1059.                   _loc4_.moveNext();
  1060.                }
  1061.             }
  1062.          }
  1063.       }
  1064.       
  1065.       [Bindable("collectionChange")]
  1066.       override public function set dataProvider(param1:Object) : void
  1067.       {
  1068.          var _loc2_:XMLList = null;
  1069.          var _loc3_:Array = null;
  1070.          if(mx_internal::_rootModel)
  1071.          {
  1072.             mx_internal::_rootModel.removeEventListener(CollectionEvent.COLLECTION_CHANGE,collectionChangeHandler);
  1073.          }
  1074.          if(typeof param1 == "string")
  1075.          {
  1076.             param1 = new XML(param1);
  1077.          }
  1078.          else if(param1 is XMLNode)
  1079.          {
  1080.             param1 = new XML(XMLNode(param1).toString());
  1081.          }
  1082.          else if(param1 is XMLList)
  1083.          {
  1084.             param1 = new XMLListCollection(param1 as XMLList);
  1085.          }
  1086.          if(param1 is XML)
  1087.          {
  1088.             _hasRoot = true;
  1089.             _loc2_ = new XMLList();
  1090.             _loc2_ += param1;
  1091.             _rootModel = new XMLListCollection(_loc2_);
  1092.          }
  1093.          else if(param1 is ICollectionView)
  1094.          {
  1095.             _rootModel = ICollectionView(param1);
  1096.             if(mx_internal::_rootModel.length == 1)
  1097.             {
  1098.                _hasRoot = true;
  1099.             }
  1100.          }
  1101.          else if(param1 is Array)
  1102.          {
  1103.             _rootModel = new ArrayCollection(param1 as Array);
  1104.          }
  1105.          else if(param1 is Object)
  1106.          {
  1107.             _hasRoot = true;
  1108.             _loc3_ = [];
  1109.             _loc3_.push(param1);
  1110.             _rootModel = new ArrayCollection(_loc3_);
  1111.          }
  1112.          else
  1113.          {
  1114.             _rootModel = new ArrayCollection();
  1115.          }
  1116.          dataProviderChanged = true;
  1117.          invalidateProperties();
  1118.       }
  1119.       
  1120.       public function get showRoot() : Boolean
  1121.       {
  1122.          return mx_internal::_showRoot;
  1123.       }
  1124.       
  1125.       override protected function collectionChangeHandler(param1:Event) : void
  1126.       {
  1127.          var _loc2_:Object = null;
  1128.          var _loc3_:Object = null;
  1129.          var _loc4_:CollectionEvent = null;
  1130.          if(iterator == null)
  1131.          {
  1132.             return;
  1133.          }
  1134.          if(param1 is CollectionEvent)
  1135.          {
  1136.             if((_loc4_ = CollectionEvent(param1)).kind == CollectionEventKind.EXPAND)
  1137.             {
  1138.                param1.stopPropagation();
  1139.             }
  1140.             if(_loc4_.kind == CollectionEventKind.UPDATE)
  1141.             {
  1142.                param1.stopPropagation();
  1143.                itemsSizeChanged = true;
  1144.                invalidateDisplayList();
  1145.             }
  1146.             else
  1147.             {
  1148.                super.collectionChangeHandler(param1);
  1149.             }
  1150.          }
  1151.       }
  1152.       
  1153.       override protected function makeListData(param1:Object, param2:String, param3:int) : BaseListData
  1154.       {
  1155.          var _loc4_:TreeListData = new TreeListData(itemToLabel(param1),param2,this,param3);
  1156.          initListData(param1,_loc4_);
  1157.          return _loc4_;
  1158.       }
  1159.       
  1160.       override public function itemToIcon(param1:Object) : Class
  1161.       {
  1162.          var icon:* = undefined;
  1163.          var item:Object = param1;
  1164.          if(item == null)
  1165.          {
  1166.             return null;
  1167.          }
  1168.          var open:Boolean = isItemOpen(item);
  1169.          var branch:Boolean = isBranch(item);
  1170.          var uid:String = itemToUID(item);
  1171.          var iconClass:Class = itemIcons && itemIcons[uid] ? itemIcons[uid][!!open ? "iconID2" : "iconID"] : null;
  1172.          if(iconClass)
  1173.          {
  1174.             return iconClass;
  1175.          }
  1176.          if(iconFunction != null)
  1177.          {
  1178.             return iconFunction(item);
  1179.          }
  1180.          if(branch)
  1181.          {
  1182.             return getStyle(!!open ? "folderOpenIcon" : "folderClosedIcon");
  1183.          }
  1184.          if(item is XML)
  1185.          {
  1186.             try
  1187.             {
  1188.                if(item[iconField].length() != 0)
  1189.                {
  1190.                   icon = String(item[iconField]);
  1191.                }
  1192.             }
  1193.             catch(e:Error)
  1194.             {
  1195.             }
  1196.          }
  1197.          else if(item is Object)
  1198.          {
  1199.             try
  1200.             {
  1201.                if(iconField && item[iconField])
  1202.                {
  1203.                   icon = item[iconField];
  1204.                }
  1205.                else if(item.icon)
  1206.                {
  1207.                   icon = item.icon;
  1208.                }
  1209.             }
  1210.             catch(e:Error)
  1211.             {
  1212.             }
  1213.          }
  1214.          if(icon == null)
  1215.          {
  1216.             icon = getStyle("defaultLeafIcon");
  1217.          }
  1218.          if(icon is Class)
  1219.          {
  1220.             return icon;
  1221.          }
  1222.          if(icon is String)
  1223.          {
  1224.             iconClass = Class(systemManager.getDefinitionByName(String(icon)));
  1225.             if(iconClass)
  1226.             {
  1227.                return iconClass;
  1228.             }
  1229.             return document[icon];
  1230.          }
  1231.          return Class(icon);
  1232.       }
  1233.       
  1234.       public function get openItems() : Object
  1235.       {
  1236.          var _loc2_:* = undefined;
  1237.          var _loc1_:Array = [];
  1238.          for each(_loc2_ in _openItems)
  1239.          {
  1240.             _loc1_.push(_loc2_);
  1241.          }
  1242.          return _loc1_;
  1243.       }
  1244.       
  1245.       override mx_internal function selectionDataPendingResultHandler(param1:Object, param2:ListBaseSelectionDataPending) : void
  1246.       {
  1247.          super.selectionDataPendingResultHandler(param1,param2);
  1248.          if(bFinishArrowKeySelection && selectedItem === proposedSelectedItem)
  1249.          {
  1250.             finishArrowKeySelection();
  1251.          }
  1252.       }
  1253.       
  1254.       override protected function initializeAccessibility() : void
  1255.       {
  1256.          if(Tree.createAccessibilityImplementation != null)
  1257.          {
  1258.             Tree.createAccessibilityImplementation(this);
  1259.          }
  1260.       }
  1261.       
  1262.       override protected function mouseOutHandler(param1:MouseEvent) : void
  1263.       {
  1264.          if(!tween)
  1265.          {
  1266.             super.mouseOutHandler(param1);
  1267.          }
  1268.       }
  1269.       
  1270.       public function get hasRoot() : Boolean
  1271.       {
  1272.          return mx_internal::_hasRoot;
  1273.       }
  1274.       
  1275.       override protected function dragEnterHandler(param1:DragEvent) : void
  1276.       {
  1277.          var event:DragEvent = param1;
  1278.          if(event.isDefaultPrevented())
  1279.          {
  1280.             return;
  1281.          }
  1282.          lastDragEvent = event;
  1283.          haveItemIndices = false;
  1284.          try
  1285.          {
  1286.             if(iteratorValid && event.dragSource.hasFormat("treeItems"))
  1287.             {
  1288.                DragManager.acceptDragDrop(this);
  1289.                DragManager.showFeedback(!!event.ctrlKey ? DragManager.COPY : DragManager.MOVE);
  1290.                showDropFeedback(event);
  1291.                return;
  1292.             }
  1293.          }
  1294.          catch(e:ItemPendingError)
  1295.          {
  1296.             if(!lastTreeSeekPending)
  1297.             {
  1298.                lastTreeSeekPending = new TreeSeekPending(event,dragEnterHandler);
  1299.                e.addResponder(new ItemResponder(seekPendingDuringDragResultHandler,seekPendingDuringDragFailureHandler,lastTreeSeekPending));
  1300.             }
  1301.          }
  1302.          catch(e1:Error)
  1303.          {
  1304.          }
  1305.          hideDropFeedback(event);
  1306.          DragManager.showFeedback(DragManager.NONE);
  1307.       }
  1308.       
  1309.       protected function initListData(param1:Object, param2:TreeListData) : void
  1310.       {
  1311.          if(param1 == null)
  1312.          {
  1313.             return;
  1314.          }
  1315.          var _loc3_:Boolean = isItemOpen(param1);
  1316.          var _loc4_:Boolean = isBranch(param1);
  1317.          var _loc5_:String = itemToUID(param1);
  1318.          param2.disclosureIcon = getStyle(!!_loc3_ ? "disclosureOpenIcon" : "disclosureClosedIcon");
  1319.          param2.open = _loc3_;
  1320.          param2.hasChildren = _loc4_;
  1321.          param2.depth = getItemDepth(param1,param2.rowIndex);
  1322.          param2.indent = (param2.depth - 1) * getStyle("indentation");
  1323.          param2.item = param1;
  1324.          param2.icon = itemToIcon(param1);
  1325.       }
  1326.       
  1327.       private function getIndent() : Number
  1328.       {
  1329.          var _loc2_:* = null;
  1330.          var _loc1_:Number = 0;
  1331.          for(_loc2_ in _openItems)
  1332.          {
  1333.             _loc1_ = Math.max(getParentStack(_openItems[_loc2_]).length + 1,_loc1_);
  1334.          }
  1335.          return _loc1_ * getStyle("indentation");
  1336.       }
  1337.       
  1338.       public function setItemIcon(param1:Object, param2:Class, param3:Class) : void
  1339.       {
  1340.          if(!itemIcons)
  1341.          {
  1342.             itemIcons = {};
  1343.          }
  1344.          if(!param3)
  1345.          {
  1346.             param3 = param2;
  1347.          }
  1348.          itemIcons[itemToUID(param1)] = {
  1349.             "iconID":param2,
  1350.             "iconID2":param3
  1351.          };
  1352.          itemsSizeChanged = true;
  1353.          invalidateDisplayList();
  1354.       }
  1355.       
  1356.       public function set firstVisibleItem(param1:Object) : void
  1357.       {
  1358.          var _loc2_:int = getItemIndex(param1);
  1359.          if(_loc2_ < 0)
  1360.          {
  1361.             return;
  1362.          }
  1363.          verticalScrollPosition = Math.min(maxVerticalScrollPosition,_loc2_);
  1364.          dispatchEvent(new Event("firstVisibleItemChanged"));
  1365.       }
  1366.       
  1367.       override protected function mouseWheelHandler(param1:MouseEvent) : void
  1368.       {
  1369.          if(!tween)
  1370.          {
  1371.             super.mouseWheelHandler(param1);
  1372.          }
  1373.       }
  1374.       
  1375.       mx_internal function onTweenUpdate(param1:Object) : void
  1376.       {
  1377.          var _loc2_:IFlexDisplayObject = null;
  1378.          var _loc3_:int = 0;
  1379.          var _loc4_:int = 0;
  1380.          var _loc5_:Number = NaN;
  1381.          var _loc6_:Number = NaN;
  1382.          var _loc7_:Sprite = null;
  1383.          _loc3_ = listItems.length;
  1384.          _loc4_ = rowIndex;
  1385.          while(_loc4_ < _loc3_)
  1386.          {
  1387.             if(listItems[_loc4_].length)
  1388.             {
  1389.                _loc2_ = IFlexDisplayObject(listItems[_loc4_][0]);
  1390.                _loc6_ = _loc2_.y;
  1391.                _loc2_.move(_loc2_.x,rowInfo[_loc4_].itemOldY + param1);
  1392.                _loc5_ = _loc2_.y - _loc6_;
  1393.             }
  1394.             _loc7_ = selectionIndicators[rowInfo[_loc4_].uid];
  1395.             rowInfo[_loc4_].y += _loc5_;
  1396.             if(_loc7_)
  1397.             {
  1398.                _loc7_.y += _loc5_;
  1399.             }
  1400.             _loc4_++;
  1401.          }
  1402.          _loc3_ = rowList.length;
  1403.          _loc4_ = 0;
  1404.          while(_loc4_ < _loc3_)
  1405.          {
  1406.             _loc7_ = null;
  1407.             _loc2_ = IFlexDisplayObject(rowList[_loc4_].item);
  1408.             if(rowMap[_loc2_.name] != null)
  1409.             {
  1410.                _loc7_ = selectionIndicators[BaseListData(rowMap[_loc2_.name]).uid];
  1411.             }
  1412.             _loc6_ = _loc2_.y;
  1413.             _loc2_.move(_loc2_.x,rowList[_loc4_].itemOldY + param1);
  1414.             _loc5_ = _loc2_.y - _loc6_;
  1415.             if(_loc7_)
  1416.             {
  1417.                _loc7_.y += _loc5_;
  1418.             }
  1419.             _loc4_++;
  1420.          }
  1421.       }
  1422.       
  1423.       override public function set dragMoveEnabled(param1:Boolean) : void
  1424.       {
  1425.          _dragMoveEnabled = param1;
  1426.       }
  1427.       
  1428.       public function get dataDescriptor() : ITreeDataDescriptor
  1429.       {
  1430.          return ITreeDataDescriptor(mx_internal::_dataDescriptor);
  1431.       }
  1432.       
  1433.       override public function get dataProvider() : Object
  1434.       {
  1435.          if(mx_internal::_rootModel)
  1436.          {
  1437.             return mx_internal::_rootModel;
  1438.          }
  1439.          return null;
  1440.       }
  1441.       
  1442.       override public function set maxHorizontalScrollPosition(param1:Number) : void
  1443.       {
  1444.          _userMaxHorizontalScrollPosition = param1;
  1445.          param1 += getIndent();
  1446.          super.maxHorizontalScrollPosition = param1;
  1447.       }
  1448.       
  1449.       override protected function scrollHandler(param1:Event) : void
  1450.       {
  1451.          if(mx_internal::isOpening)
  1452.          {
  1453.             return;
  1454.          }
  1455.          if(param1 is ScrollEvent)
  1456.          {
  1457.             super.scrollHandler(param1);
  1458.          }
  1459.       }
  1460.       
  1461.       override protected function addDragData(param1:Object) : void
  1462.       {
  1463.          param1.addHandler(collapseSelectedItems,"treeItems");
  1464.       }
  1465.       
  1466.       mx_internal function getItemDepth(param1:Object, param2:int) : int
  1467.       {
  1468.          if(!collection)
  1469.          {
  1470.             return 0;
  1471.          }
  1472.          if(!iterator)
  1473.          {
  1474.             listContent.iterator = collection.createCursor();
  1475.          }
  1476.          if(iterator.current == param1)
  1477.          {
  1478.             return getCurrentCursorDepth();
  1479.          }
  1480.          var _loc3_:CursorBookmark = iterator.bookmark;
  1481.          iterator.seek(_loc3_,param2);
  1482.          var _loc4_:int = getCurrentCursorDepth();
  1483.          iterator.seek(_loc3_,0);
  1484.          return _loc4_;
  1485.       }
  1486.       
  1487.       override public function styleChanged(param1:String) : void
  1488.       {
  1489.          if(param1 == null || param1 == "styleName" || IS_NEW_ROW_STYLE[param1])
  1490.          {
  1491.             itemsSizeChanged = true;
  1492.             invalidateDisplayList();
  1493.          }
  1494.          super.styleChanged(param1);
  1495.       }
  1496.       
  1497.       mx_internal function expandItemHandler(param1:TreeEvent) : void
  1498.       {
  1499.          if(param1.isDefaultPrevented())
  1500.          {
  1501.             return;
  1502.          }
  1503.          if(param1.type == TreeEvent.ITEM_OPENING)
  1504.          {
  1505.             expandItem(param1.item,param1.opening,param1.animate,param1.dispatchEvent,param1.triggerEvent);
  1506.          }
  1507.       }
  1508.       
  1509.       override protected function mouseDoubleClickHandler(param1:MouseEvent) : void
  1510.       {
  1511.          if(!tween)
  1512.          {
  1513.             super.mouseDoubleClickHandler(param1);
  1514.          }
  1515.       }
  1516.       
  1517.       mx_internal function addChildItem(param1:Object, param2:Object, param3:Number) : Boolean
  1518.       {
  1519.          return mx_internal::_dataDescriptor.addChildAt(param1,param2,param3,iterator.view);
  1520.       }
  1521.       
  1522.       private function getParentStack(param1:Object) : Array
  1523.       {
  1524.          var _loc2_:Array = [];
  1525.          if(param1 == null)
  1526.          {
  1527.             return _loc2_;
  1528.          }
  1529.          var _loc3_:* = getParentItem(param1);
  1530.          while(_loc3_)
  1531.          {
  1532.             _loc2_.push(_loc3_);
  1533.             _loc3_ = getParentItem(_loc3_);
  1534.          }
  1535.          return _loc2_;
  1536.       }
  1537.       
  1538.       public function getItemIndex(param1:Object) : int
  1539.       {
  1540.          var _loc2_:IViewCursor = collection.createCursor();
  1541.          var _loc3_:int = 0;
  1542.          while(_loc2_.current !== param1)
  1543.          {
  1544.             _loc3_++;
  1545.             if(!_loc2_.moveNext())
  1546.             {
  1547.                break;
  1548.             }
  1549.          }
  1550.          _loc2_.seek(CursorBookmark.FIRST,0);
  1551.          return _loc3_;
  1552.       }
  1553.       
  1554.       public function expandItem(param1:Object, param2:Boolean, param3:Boolean = false, param4:Boolean = false, param5:Event = null) : void
  1555.       {
  1556.          var i:int = 0;
  1557.          var newRowIndex:int = 0;
  1558.          var rowData:BaseListData = null;
  1559.          var tmpMask:DisplayObject = null;
  1560.          var tmpRowInfo:Object = null;
  1561.          var row:Array = null;
  1562.          var n:int = 0;
  1563.          var eventArr:Array = null;
  1564.          var renderer:IListItemRenderer = null;
  1565.          var xx:Number = NaN;
  1566.          var ww:Number = NaN;
  1567.          var yy:Number = NaN;
  1568.          var hh:Number = NaN;
  1569.          var delta:int = 0;
  1570.          var maxDist:Number = NaN;
  1571.          var oE:Function = null;
  1572.          var di:IDropInListItemRenderer = null;
  1573.          var treeListData:TreeListData = null;
  1574.          var data:Object = null;
  1575.          var referenceRowInfo:ListRowInfo = null;
  1576.          var rh:Number = NaN;
  1577.          var more:Boolean = false;
  1578.          var valid:Boolean = false;
  1579.          var startY:Number = NaN;
  1580.          var maskY:Number = NaN;
  1581.          var maskX:Number = NaN;
  1582.          var indicator:Object = null;
  1583.          var item:Object = param1;
  1584.          var open:Boolean = param2;
  1585.          var animate:Boolean = param3;
  1586.          var dispatchEvent:Boolean = param4;
  1587.          var cause:Event = param5;
  1588.          if(iterator == null)
  1589.          {
  1590.             return;
  1591.          }
  1592.          if(cause)
  1593.          {
  1594.             lastUserInteraction = cause;
  1595.          }
  1596.          expandedItem = item;
  1597.          listContent.allowItemSizeChangeNotification = false;
  1598.          var bSelected:Boolean = false;
  1599.          var bHighlight:Boolean = false;
  1600.          var bCaret:Boolean = false;
  1601.          var uid:String = itemToUID(item);
  1602.          if(!isBranch(item) || isItemOpen(item) == open || mx_internal::isOpening)
  1603.          {
  1604.             return;
  1605.          }
  1606.          if(itemEditorInstance)
  1607.          {
  1608.             endEdit(ListEventReason.OTHER);
  1609.          }
  1610.          oldLength = mx_internal::collectionLength;
  1611.          var bookmark:CursorBookmark = iterator.bookmark;
  1612.          var event:CollectionEvent = new CollectionEvent(CollectionEvent.COLLECTION_CHANGE,false,true,CollectionEventKind.EXPAND);
  1613.          event.items = [item];
  1614.          if(open)
  1615.          {
  1616.             _openItems[uid] = item;
  1617.             collection.dispatchEvent(event);
  1618.             rowsTweened = Math.abs(oldLength - collection.length);
  1619.          }
  1620.          else
  1621.          {
  1622.             delete _openItems[uid];
  1623.             collection.dispatchEvent(event);
  1624.             rowsTweened = Math.abs(oldLength - collection.length);
  1625.          }
  1626.          if(isItemVisible(item))
  1627.          {
  1628.             if(visibleData[uid])
  1629.             {
  1630.                n = listItems.length;
  1631.                rowIndex = 0;
  1632.                while(rowIndex < n)
  1633.                {
  1634.                   if(rowInfo[rowIndex].uid == uid)
  1635.                   {
  1636.                      ++rowIndex;
  1637.                      break;
  1638.                   }
  1639.                   ++rowIndex;
  1640.                }
  1641.             }
  1642.             var rC:int = listItems.length;
  1643.             var rowsToMove:int = rowsTweened;
  1644.             var dur:Number = getStyle("openDuration");
  1645.             if(animate && rowIndex < rC && rowsToMove > 0 && rowsToMove < 20 && dur != 0)
  1646.             {
  1647.                if(tween)
  1648.                {
  1649.                   tween.endTween();
  1650.                }
  1651.                renderer = listItems[rowIndex - 1][0];
  1652.                if(renderer is IDropInListItemRenderer)
  1653.                {
  1654.                   di = IDropInListItemRenderer(renderer);
  1655.                   treeListData = TreeListData(di.listData);
  1656.                   treeListData = TreeListData(makeListData(treeListData.item,treeListData.uid,treeListData.rowIndex));
  1657.                   di.listData = treeListData;
  1658.                   renderer.data = renderer.data;
  1659.                }
  1660.                opening = open;
  1661.                isOpening = true;
  1662.                maskList = [];
  1663.                rowList = [];
  1664.                xx = getStyle("paddingLeft") - horizontalScrollPosition;
  1665.                ww = renderer.width;
  1666.                yy = 0;
  1667.                delta = rowIndex;
  1668.                maxDist = 0;
  1669.                if(open)
  1670.                {
  1671.                   newRowIndex = rowIndex;
  1672.                   maxDist = listContent.height - rowInfo[rowIndex].y;
  1673.                   iterator.seek(CursorBookmark.CURRENT,delta);
  1674.                   i = 0;
  1675.                   while(i < rowsToMove && yy < maxDist)
  1676.                   {
  1677.                      data = iterator.current;
  1678.                      if(freeItemRenderers.length)
  1679.                      {
  1680.                         renderer = freeItemRenderers.pop();
  1681.                      }
  1682.                      else
  1683.                      {
  1684.                         renderer = createItemRenderer(data);
  1685.                         renderer.owner = this;
  1686.                         renderer.styleName = listContent;
  1687.                         listContent.addChild(DisplayObject(renderer));
  1688.                      }
  1689.                      uid = itemToUID(data);
  1690.                      rowData = makeListData(data,uid,rowIndex + i);
  1691.                      rowMap[renderer.name] = rowData;
  1692.                      if(renderer is IDropInListItemRenderer)
  1693.                      {
  1694.                         IDropInListItemRenderer(renderer).listData = !!data ? rowData : null;
  1695.                      }
  1696.                      renderer.data = data;
  1697.                      renderer.enabled = enabled;
  1698.                      if(data)
  1699.                      {
  1700.                         visibleData[uid] = renderer;
  1701.                         renderer.visible = true;
  1702.                      }
  1703.                      else
  1704.                      {
  1705.                         renderer.visible = false;
  1706.                      }
  1707.                      renderer.explicitWidth = ww;
  1708.                      if(renderer is IInvalidating && (wordWrapChanged || variableRowHeight))
  1709.                      {
  1710.                         IInvalidating(renderer).invalidateSize();
  1711.                      }
  1712.                      UIComponentGlobals.layoutManager.validateClient(renderer,true);
  1713.                      hh = Math.ceil(!!variableRowHeight ? Number(renderer.getExplicitOrMeasuredHeight() + mx_internal::cachedPaddingTop + mx_internal::cachedPaddingBottom) : Number(rowHeight));
  1714.                      rh = renderer.getExplicitOrMeasuredHeight();
  1715.                      renderer.setActualSize(ww,!!variableRowHeight ? Number(rh) : Number(rowHeight - mx_internal::cachedPaddingTop - mx_internal::cachedPaddingBottom));
  1716.                      renderer.move(xx,yy + mx_internal::cachedPaddingTop);
  1717.                      bSelected = selectedData[uid] != null;
  1718.                      bHighlight = highlightUID == uid;
  1719.                      bCaret = caretUID == uid;
  1720.                      tmpRowInfo = new ListRowInfo(yy,hh,uid,data);
  1721.                      if(data)
  1722.                      {
  1723.                         drawItem(renderer,bSelected,bHighlight,bCaret);
  1724.                      }
  1725.                      yy += hh;
  1726.                      rowInfo.splice(rowIndex + i,0,tmpRowInfo);
  1727.                      row = [];
  1728.                      row.push(renderer);
  1729.                      listItems.splice(rowIndex + i,0,row);
  1730.                      if(i < rowsToMove - 1)
  1731.                      {
  1732.                         try
  1733.                         {
  1734.                            iterator.moveNext();
  1735.                         }
  1736.                         catch(e:ItemPendingError)
  1737.                         {
  1738.                            rowsToMove = i + 1;
  1739.                            break;
  1740.                         }
  1741.                      }
  1742.                      i++;
  1743.                   }
  1744.                   rowsTweened = i;
  1745.                   referenceRowInfo = rowInfo[rowIndex + rowsTweened];
  1746.                   i = 0;
  1747.                   while(i < rowsTweened)
  1748.                   {
  1749.                      renderer = listItems[rowIndex + i][0];
  1750.                      renderer.move(renderer.x,renderer.y - (yy - referenceRowInfo.y));
  1751.                      rowInfo[rowIndex + i].y -= yy - referenceRowInfo.y;
  1752.                      tmpMask = makeMask();
  1753.                      tmpMask.x = xx;
  1754.                      tmpMask.y = referenceRowInfo.y;
  1755.                      tmpMask.width = ww;
  1756.                      tmpMask.height = yy;
  1757.                      listItems[rowIndex + i][0].mask = tmpMask;
  1758.                      i++;
  1759.                   }
  1760.                }
  1761.                else
  1762.                {
  1763.                   more = true;
  1764.                   valid = true;
  1765.                   startY = yy = Number(rowInfo[listItems.length - 1].y + rowInfo[listItems.length - 1].height);
  1766.                   i = rowIndex;
  1767.                   while(i < rowIndex + rowsToMove && i < rC)
  1768.                   {
  1769.                      maxDist += rowInfo[i].height;
  1770.                      rowList.push({"item":listItems[i][0]});
  1771.                      tmpMask = makeMask();
  1772.                      tmpMask.x = xx;
  1773.                      tmpMask.y = listItems[rowIndex][0].y;
  1774.                      tmpMask.width = ww;
  1775.                      tmpMask.height = maxDist;
  1776.                      listItems[i][0].mask = tmpMask;
  1777.                      i++;
  1778.                   }
  1779.                   rowsToMove = i - rowIndex;
  1780.                   rowInfo.splice(rowIndex,rowsToMove);
  1781.                   listItems.splice(rowIndex,rowsToMove);
  1782.                   iterator.seek(CursorBookmark.CURRENT,listItems.length);
  1783.                   more = iterator != null && !iterator.afterLast && iteratorValid;
  1784.                   maxDist += yy;
  1785.                   i = 0;
  1786.                   while(i < rowsToMove && yy < maxDist)
  1787.                   {
  1788.                      uid = null;
  1789.                      data = null;
  1790.                      renderer = null;
  1791.                      valid = more;
  1792.                      data = !!more ? iterator.current : null;
  1793.                      if(valid)
  1794.                      {
  1795.                         if(freeItemRenderers.length)
  1796.                         {
  1797.                            renderer = freeItemRenderers.pop();
  1798.                         }
  1799.                         else
  1800.                         {
  1801.                            renderer = createItemRenderer(data);
  1802.                            renderer.owner = this;
  1803.                            renderer.styleName = listContent;
  1804.                            listContent.addChild(DisplayObject(renderer));
  1805.                         }
  1806.                         uid = itemToUID(data);
  1807.                         rowData = makeListData(data,uid,rC - rowsToMove + i);
  1808.                         rowMap[renderer.name] = rowData;
  1809.                         if(renderer is IDropInListItemRenderer)
  1810.                         {
  1811.                            IDropInListItemRenderer(renderer).listData = !!data ? rowData : null;
  1812.                         }
  1813.                         renderer.data = data;
  1814.                         renderer.enabled = enabled;
  1815.                         if(data)
  1816.                         {
  1817.                            visibleData[uid] = renderer;
  1818.                            renderer.visible = true;
  1819.                         }
  1820.                         else
  1821.                         {
  1822.                            renderer.visible = false;
  1823.                         }
  1824.                         renderer.explicitWidth = ww;
  1825.                         if(renderer is IInvalidating && (wordWrapChanged || variableRowHeight))
  1826.                         {
  1827.                            IInvalidating(renderer).invalidateSize();
  1828.                         }
  1829.                         UIComponentGlobals.layoutManager.validateClient(renderer,true);
  1830.                         hh = Math.ceil(!!variableRowHeight ? Number(renderer.getExplicitOrMeasuredHeight() + mx_internal::cachedPaddingTop + mx_internal::cachedPaddingBottom) : Number(rowHeight));
  1831.                         rh = renderer.getExplicitOrMeasuredHeight();
  1832.                         renderer.setActualSize(ww,!!variableRowHeight ? Number(rh) : Number(rowHeight - mx_internal::cachedPaddingTop - mx_internal::cachedPaddingBottom));
  1833.                         renderer.move(xx,yy + mx_internal::cachedPaddingTop);
  1834.                      }
  1835.                      else if(!variableRowHeight)
  1836.                      {
  1837.                         hh = rowIndex + i > 0 ? Number(rowInfo[rowIndex + i - 1].height) : Number(rowHeight);
  1838.                      }
  1839.                      else if(rowList[i])
  1840.                      {
  1841.                         hh = Math.ceil(rowList[i].item.getExplicitOrMeasuredHeight() + mx_internal::cachedPaddingTop + mx_internal::cachedPaddingBottom);
  1842.                      }
  1843.                      else
  1844.                      {
  1845.                         hh = rowHeight;
  1846.                      }
  1847.                      bSelected = selectedData[uid] != null;
  1848.                      bHighlight = highlightUID == uid;
  1849.                      bCaret = caretUID == uid;
  1850.                      tmpRowInfo = new ListRowInfo(yy,hh,uid,data);
  1851.                      rowInfo.push(tmpRowInfo);
  1852.                      if(data)
  1853.                      {
  1854.                         drawItem(renderer,bSelected,bHighlight,bCaret);
  1855.                      }
  1856.                      yy += hh;
  1857.                      if(valid)
  1858.                      {
  1859.                         row = [];
  1860.                         row.push(renderer);
  1861.                         listItems.push(row);
  1862.                      }
  1863.                      else
  1864.                      {
  1865.                         listItems.push([]);
  1866.                      }
  1867.                      if(more)
  1868.                      {
  1869.                         try
  1870.                         {
  1871.                            more = iterator.moveNext();
  1872.                         }
  1873.                         catch(e:ItemPendingError)
  1874.                         {
  1875.                            more = false;
  1876.                         }
  1877.                      }
  1878.                      i++;
  1879.                   }
  1880.                   maskY = rowList[0].item.y - getStyle("paddingTop");
  1881.                   maskX = rowList[0].item.x - getStyle("paddingLeft");
  1882.                   i = 0;
  1883.                   while(i < rowList.length)
  1884.                   {
  1885.                      indicator = selectionIndicators[itemToUID(rowList[i].item.data)];
  1886.                      if(indicator)
  1887.                      {
  1888.                         tmpMask = makeMask();
  1889.                         tmpMask.x = maskX;
  1890.                         tmpMask.y = maskY;
  1891.                         tmpMask.width = rowList[i].item.width + getStyle("paddingLeft") + getStyle("paddingRight");
  1892.                         tmpMask.height = rowList[i].item.y + rowList[i].item.height + getStyle("paddingTop") + getStyle("paddingBottom") - maskY;
  1893.                         selectionIndicators[itemToUID(rowList[i].item.data)].mask = tmpMask;
  1894.                      }
  1895.                      i++;
  1896.                   }
  1897.                }
  1898.                iterator.seek(bookmark,0);
  1899.                rC = rowList.length;
  1900.                i = 0;
  1901.                while(i < rC)
  1902.                {
  1903.                   rowList[i].itemOldY = rowList[i].item.y;
  1904.                   i++;
  1905.                }
  1906.                rC = listItems.length;
  1907.                i = rowIndex;
  1908.                while(i < rC)
  1909.                {
  1910.                   if(listItems[i].length)
  1911.                   {
  1912.                      rowInfo[i].itemOldY = listItems[i][0].y;
  1913.                   }
  1914.                   rowInfo[i].oldY = rowInfo[i].y;
  1915.                   i++;
  1916.                }
  1917.                dur *= Math.max(rowsToMove / 5,1);
  1918.                if(dispatchEvent)
  1919.                {
  1920.                   eventAfterTween = item;
  1921.                }
  1922.                tween = new Tween(this,0,!!open ? yy : startY - yy,dur,5);
  1923.                oE = getStyle("openEasingFunction") as Function;
  1924.                if(oE != null)
  1925.                {
  1926.                   tween.easingFunction = oE;
  1927.                }
  1928.                UIComponent.suspendBackgroundProcessing();
  1929.                UIComponentGlobals.layoutManager.validateNow();
  1930.             }
  1931.             else
  1932.             {
  1933.                if(dispatchEvent)
  1934.                {
  1935.                   dispatchTreeEvent(!!open ? TreeEvent.ITEM_OPEN : TreeEvent.ITEM_CLOSE,item,visibleData[itemToUID(item)],lastUserInteraction);
  1936.                   lastUserInteraction = null;
  1937.                }
  1938.                itemsSizeChanged = true;
  1939.                invalidateDisplayList();
  1940.             }
  1941.             if(!wordWrap && initialized)
  1942.             {
  1943.                super.maxHorizontalScrollPosition = _userMaxHorizontalScrollPosition > 0 ? Number(_userMaxHorizontalScrollPosition + getIndent()) : Number(super.maxHorizontalScrollPosition);
  1944.             }
  1945.             listContent.allowItemSizeChangeNotification = variableRowHeight;
  1946.             return;
  1947.          }
  1948.          eventArr = !!open ? buildUpCollectionEvents(true) : buildUpCollectionEvents(false);
  1949.          i = 0;
  1950.          while(i < eventArr.length)
  1951.          {
  1952.             collection.dispatchEvent(eventArr[i]);
  1953.             i++;
  1954.          }
  1955.       }
  1956.       
  1957.       override protected function commitProperties() : void
  1958.       {
  1959.          var _loc1_:ICollectionView = null;
  1960.          var _loc2_:* = undefined;
  1961.          if(mx_internal::showRootChanged)
  1962.          {
  1963.             if(!mx_internal::_hasRoot)
  1964.             {
  1965.                showRootChanged = false;
  1966.             }
  1967.          }
  1968.          if(dataProviderChanged || mx_internal::showRootChanged || openItemsChanged)
  1969.          {
  1970.             dataProviderChanged = false;
  1971.             showRootChanged = false;
  1972.             if(!openItemsChanged)
  1973.             {
  1974.                _openItems = {};
  1975.             }
  1976.             if(mx_internal::_rootModel && !mx_internal::_showRoot && mx_internal::_hasRoot)
  1977.             {
  1978.                _loc2_ = mx_internal::_rootModel.createCursor().current;
  1979.                if(_loc2_ != null && mx_internal::_dataDescriptor.isBranch(_loc2_,mx_internal::_rootModel) && mx_internal::_dataDescriptor.hasChildren(_loc2_,mx_internal::_rootModel))
  1980.                {
  1981.                   _loc1_ = getChildren(_loc2_,mx_internal::_rootModel);
  1982.                }
  1983.             }
  1984.             if(mx_internal::_rootModel)
  1985.             {
  1986.                super.dataProvider = wrappedCollection = mx_internal::_dataDescriptor is ITreeDataDescriptor2 ? ITreeDataDescriptor2(mx_internal::_dataDescriptor).getHierarchicalCollectionAdaptor(_loc1_ != null ? _loc1_ : mx_internal::_rootModel,itemToUID,_openItems) : new HierarchicalCollectionView(_loc1_ != null ? _loc1_ : mx_internal::_rootModel,mx_internal::_dataDescriptor,itemToUID,_openItems);
  1987.                mx_internal::wrappedCollection.addEventListener(CollectionEvent.COLLECTION_CHANGE,collectionChangeHandler,false,EventPriority.DEFAULT_HANDLER,true);
  1988.             }
  1989.             else
  1990.             {
  1991.                super.dataProvider = null;
  1992.             }
  1993.          }
  1994.          super.commitProperties();
  1995.       }
  1996.       
  1997.       public function getParentItem(param1:Object) : *
  1998.       {
  1999.          if(param1 == null)
  2000.          {
  2001.             return null;
  2002.          }
  2003.          if(param1 && collection)
  2004.          {
  2005.             if(mx_internal::_dataDescriptor is ITreeDataDescriptor2)
  2006.             {
  2007.                return ITreeDataDescriptor2(mx_internal::_dataDescriptor).getParent(param1,mx_internal::wrappedCollection,mx_internal::_rootModel);
  2008.             }
  2009.             return HierarchicalCollectionView(collection).getParentItem(param1);
  2010.          }
  2011.          return null;
  2012.       }
  2013.       
  2014.       [Bindable("firstVisibleItemChanged")]
  2015.       public function get firstVisibleItem() : Object
  2016.       {
  2017.          if(listItems.length > 0 && listItems[0].length > 0)
  2018.          {
  2019.             return listItems[0][0].data;
  2020.          }
  2021.          return null;
  2022.       }
  2023.       
  2024.       private function getCurrentCursorDepth() : int
  2025.       {
  2026.          if(mx_internal::_dataDescriptor is ITreeDataDescriptor2)
  2027.          {
  2028.             return ITreeDataDescriptor2(mx_internal::_dataDescriptor).getNodeDepth(iterator.current,iterator,mx_internal::_rootModel);
  2029.          }
  2030.          return HierarchicalViewCursor(iterator).currentDepth;
  2031.       }
  2032.       
  2033.       override public function get maxHorizontalScrollPosition() : Number
  2034.       {
  2035.          return _userMaxHorizontalScrollPosition > 0 ? Number(_userMaxHorizontalScrollPosition) : Number(super.maxHorizontalScrollPosition);
  2036.       }
  2037.       
  2038.       private function getOpenChildrenStack(param1:Object, param2:Array) : Array
  2039.       {
  2040.          var _loc3_:Object = null;
  2041.          if(param1 == null)
  2042.          {
  2043.             return param2;
  2044.          }
  2045.          var _loc4_:ICollectionView;
  2046.          if(!(_loc4_ = getChildren(param1,iterator.view)))
  2047.          {
  2048.             return [];
  2049.          }
  2050.          var _loc5_:IViewCursor = _loc4_.createCursor();
  2051.          while(!_loc5_.afterLast)
  2052.          {
  2053.             _loc3_ = _loc5_.current;
  2054.             param2.push(_loc3_);
  2055.             if(isBranch(_loc3_) && isItemOpen(_loc3_))
  2056.             {
  2057.                getOpenChildrenStack(_loc3_,param2);
  2058.             }
  2059.             _loc5_.moveNext();
  2060.          }
  2061.          return param2;
  2062.       }
  2063.       
  2064.       override protected function dragDropHandler(param1:DragEvent) : void
  2065.       {
  2066.          var _loc2_:Array = null;
  2067.          var _loc3_:int = 0;
  2068.          var _loc4_:int = 0;
  2069.          var _loc5_:int = 0;
  2070.          var _loc6_:* = undefined;
  2071.          var _loc7_:* = undefined;
  2072.          var _loc8_:int = 0;
  2073.          var _loc9_:Array = null;
  2074.          var _loc10_:Object = null;
  2075.          if(param1.isDefaultPrevented())
  2076.          {
  2077.             return;
  2078.          }
  2079.          hideDropFeedback(param1);
  2080.          if(param1.dragSource.hasFormat("treeItems"))
  2081.          {
  2082.             _loc2_ = param1.dragSource.dataForFormat("treeItems") as Array;
  2083.             if(param1.action == DragManager.MOVE && dragMoveEnabled)
  2084.             {
  2085.                if(param1.dragInitiator == this)
  2086.                {
  2087.                   calculateDropIndex(param1);
  2088.                   _loc8_ = mx_internal::_dropData.index;
  2089.                   (_loc9_ = getParentStack(mx_internal::_dropData.parent)).unshift(mx_internal::_dropData.parent);
  2090.                   _loc4_ = _loc2_.length;
  2091.                   _loc3_ = 0;
  2092.                   while(_loc3_ < _loc4_)
  2093.                   {
  2094.                      _loc6_ = getParentItem(_loc2_[_loc3_]);
  2095.                      _loc5_ = getChildIndexInParent(_loc6_,_loc2_[_loc3_]);
  2096.                      for each(_loc7_ in _loc9_)
  2097.                      {
  2098.                         if(_loc2_[_loc3_] === _loc7_)
  2099.                         {
  2100.                            return;
  2101.                         }
  2102.                      }
  2103.                      removeChildItem(_loc6_,_loc2_[_loc3_],_loc5_);
  2104.                      if(_loc6_ == mx_internal::_dropData.parent && _loc5_ < mx_internal::_dropData.index)
  2105.                      {
  2106.                         _loc8_--;
  2107.                      }
  2108.                      addChildItem(mx_internal::_dropData.parent,_loc2_[_loc3_],_loc8_);
  2109.                      _loc3_++;
  2110.                   }
  2111.                   return;
  2112.                }
  2113.             }
  2114.             if(param1.action == DragManager.COPY)
  2115.             {
  2116.                if(!dataProvider)
  2117.                {
  2118.                   dataProvider = [];
  2119.                   validateNow();
  2120.                }
  2121.                _loc4_ = _loc2_.length;
  2122.                _loc3_ = 0;
  2123.                while(_loc3_ < _loc4_)
  2124.                {
  2125.                   _loc10_ = copyItemWithUID(_loc2_[_loc3_]);
  2126.                   addChildItem(mx_internal::_dropData.parent,_loc10_,mx_internal::_dropData.index);
  2127.                   _loc3_++;
  2128.                }
  2129.             }
  2130.          }
  2131.          lastDragEvent = null;
  2132.       }
  2133.       
  2134.       private function checkItemIndices(param1:DragEvent) : void
  2135.       {
  2136.          var _loc2_:Array = null;
  2137.          var _loc3_:int = 0;
  2138.          var _loc4_:int = 0;
  2139.          var _loc5_:Object = null;
  2140.          if(haveItemIndices)
  2141.          {
  2142.             return;
  2143.          }
  2144.          if((param1.action == DragManager.MOVE || param1.action == DragManager.NONE) && dragMoveEnabled)
  2145.          {
  2146.             if(param1.dragInitiator == this)
  2147.             {
  2148.                _loc2_ = param1.dragSource.dataForFormat("treeItems") as Array;
  2149.                _loc3_ = _loc2_.length;
  2150.                _loc4_ = 0;
  2151.                while(_loc4_ < _loc3_)
  2152.                {
  2153.                   _loc5_ = getParentItem(_loc2_[_loc4_]);
  2154.                   getChildIndexInParent(_loc5_,_loc2_[_loc4_]);
  2155.                   _loc4_++;
  2156.                }
  2157.                haveItemIndices = true;
  2158.             }
  2159.          }
  2160.       }
  2161.       
  2162.       override protected function mouseClickHandler(param1:MouseEvent) : void
  2163.       {
  2164.          if(!tween)
  2165.          {
  2166.             super.mouseClickHandler(param1);
  2167.          }
  2168.       }
  2169.       
  2170.       override protected function mouseOverHandler(param1:MouseEvent) : void
  2171.       {
  2172.          if(!tween)
  2173.          {
  2174.             super.mouseOverHandler(param1);
  2175.          }
  2176.       }
  2177.       
  2178.       private function seekPendingDuringDragFailureHandler(param1:Object, param2:TreeSeekPending) : void
  2179.       {
  2180.       }
  2181.       
  2182.       override protected function updateDisplayList(param1:Number, param2:Number) : void
  2183.       {
  2184.          if(tween)
  2185.          {
  2186.             tween.endTween();
  2187.          }
  2188.          super.updateDisplayList(param1,param2);
  2189.          if(collection)
  2190.          {
  2191.             collectionLength = collection.length;
  2192.          }
  2193.       }
  2194.       
  2195.       private function makeMask() : DisplayObject
  2196.       {
  2197.          var _loc1_:Shape = new FlexShape();
  2198.          _loc1_.name = "mask";
  2199.          var _loc2_:Graphics = _loc1_.graphics;
  2200.          _loc2_.beginFill(16777215);
  2201.          _loc2_.moveTo(0,0);
  2202.          _loc2_.lineTo(0,10);
  2203.          _loc2_.lineTo(10,10);
  2204.          _loc2_.lineTo(10,0);
  2205.          _loc2_.lineTo(0,0);
  2206.          _loc2_.endFill();
  2207.          listContent.addChild(_loc1_);
  2208.          return _loc1_;
  2209.       }
  2210.       
  2211.       override protected function dragCompleteHandler(param1:DragEvent) : void
  2212.       {
  2213.          var items:Array = null;
  2214.          var parent:* = undefined;
  2215.          var index:int = 0;
  2216.          var i:int = 0;
  2217.          var n:int = 0;
  2218.          var targetTree:Tree = null;
  2219.          var item:Object = null;
  2220.          var event:DragEvent = param1;
  2221.          isPressed = false;
  2222.          if(event.isDefaultPrevented())
  2223.          {
  2224.             return;
  2225.          }
  2226.          resetDragScrolling();
  2227.          try
  2228.          {
  2229.             if(event.dragSource.hasFormat("treeItems"))
  2230.             {
  2231.                if(event.action == DragManager.MOVE && dragMoveEnabled)
  2232.                {
  2233.                   if(event.relatedObject != this)
  2234.                   {
  2235.                      items = event.dragSource.dataForFormat("treeItems") as Array;
  2236.                      n = items.length;
  2237.                      i = 0;
  2238.                      while(i < n)
  2239.                      {
  2240.                         parent = getParentItem(items[i]);
  2241.                         index = getChildIndexInParent(parent,items[i]);
  2242.                         removeChildItem(parent,items[i],index);
  2243.                         i++;
  2244.                      }
  2245.                      if(event.relatedObject is Tree)
  2246.                      {
  2247.                         targetTree = Tree(event.relatedObject);
  2248.                         if(!targetTree.dataProvider)
  2249.                         {
  2250.                            targetTree.dataProvider = [];
  2251.                            targetTree.validateNow();
  2252.                         }
  2253.                         n = items.length;
  2254.                         i = 0;
  2255.                         while(i < n)
  2256.                         {
  2257.                            item = items[i];
  2258.                            targetTree.addChildItem(targetTree._dropData.parent,item,targetTree._dropData.index);
  2259.                            i++;
  2260.                         }
  2261.                      }
  2262.                   }
  2263.                   clearSelected(false);
  2264.                }
  2265.             }
  2266.          }
  2267.          catch(e:ItemPendingError)
  2268.          {
  2269.             e.addResponder(new ItemResponder(seekPendingDuringDragResultHandler,seekPendingDuringDragFailureHandler,new TreeSeekPending(event,dragCompleteHandler)));
  2270.          }
  2271.          lastDragEvent = null;
  2272.       }
  2273.       
  2274.       public function set showRoot(param1:Boolean) : void
  2275.       {
  2276.          if(mx_internal::_showRoot != param1)
  2277.          {
  2278.             _showRoot = param1;
  2279.             showRootChanged = true;
  2280.             invalidateProperties();
  2281.          }
  2282.       }
  2283.    }
  2284. }
  2285.  
  2286. import mx.events.DragEvent;
  2287.  
  2288. class TreeSeekPending
  2289. {
  2290.     
  2291.    
  2292.    public var retryFunction:Function;
  2293.    
  2294.    public var event:DragEvent;
  2295.    
  2296.    function TreeSeekPending(param1:DragEvent, param2:Function)
  2297.    {
  2298.       super();
  2299.       this.event = param1;
  2300.       this.retryFunction = param2;
  2301.    }
  2302. }
  2303.